package com.yjz.leetcode.二叉树学习.红黑树;

import lombok.AllArgsConstructor;
import lombok.Data;

import static com.yjz.leetcode.二叉树学习.红黑树.Node.Color.RED;

/**
 * @author :yuanJinZhong
 * @description: 红黑树的节点类
 * @date :2018/12/3-21:47
 */
@Data
@AllArgsConstructor
public class Node<T extends Comparable<? extends T>> {
  /**
   * 节点数据
   */
  private T data;

  //左子节点
  private Node<T> leftChild;

  //右子节点
  private Node<T> rightChild;

  //父节点
  private Node<T> parent;

  //颜色 ：根节点必须是黑色，不允许连续的黑色节点，整颗树的黑色高度必须一样
  Color color;


  /**
   * 返回节点数据
   *
   * @return
   */
  public T getData() {
    return data;
  }

  //打印节点的关键值和颜色信息
  public String toString() {
    return "" + data + (this.color == RED ? "R" : "B");
  }

  /**
   * 颜色枚举
   */
  enum Color {
    RED, BLACK;
  }
}
